package com.zj.fx.model.rpa;

import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * PPA同步调用同步接口记录台账 RpaRecordPushExample
 *
 * @author SQL_自动生成
 * @date 2023-10-27 10:06:01
 */
public class RpaRecordPushExample {

    protected String orderByClause;

    protected boolean distinct;

    protected List<Criteria> oredCriteria;

    public RpaRecordPushExample() {
        oredCriteria = new ArrayList<Criteria>();
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    public boolean isDistinct() {
        return distinct;
    }

    public List<Criteria> getOredCriteria() {
        return oredCriteria;
    }

    public void or(Criteria criteria) {
        oredCriteria.add(criteria);
    }

    public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    protected Criteria createCriteriaInternal() {
        Criteria criteria = new Criteria();
        return criteria;
    }

    public void clear() {
        oredCriteria.clear();
        orderByClause = null;
        distinct = false;
    }

    protected abstract static class GeneratedCriteria {
        protected List<Criterion> criteria;

        protected GeneratedCriteria() {
            super();
            criteria = new ArrayList<Criterion>();
        }

        public boolean isValid() {
            return criteria.size() > 0;
        }

        public List<Criterion> getAllCriteria() {
            return criteria;
        }

        public List<Criterion> getCriteria() {
            return criteria;
        }

        protected void addCriterion(String condition) {
            if (condition == null) {
                throw new RuntimeException("Value for condition cannot be null");
            }
            criteria.add(new Criterion(condition));
        }

        protected void addCriterion(String condition, Object value, String property) {
            if (value == null) {
                throw new RuntimeException("Value for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value));
        }

        protected void addCriterion(String condition, Object value1, Object value2, String property) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Between values for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value1, value2));
        }


        public Criteria andIdIsNull() {
            addCriterion("id is null");
            return (Criteria) this;
        }

        public Criteria andIdIsNotNull() {
            addCriterion("id is not null");
            return (Criteria) this;
        }

        public Criteria andIdEqualTo(String value) {
            addCriterion("id =", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdNotEqualTo(String value) {
            addCriterion("id <>", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdGreaterThan(String value) {
            addCriterion("id >", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdGreaterThanOrEqualTo(String value) {
            addCriterion("id >=", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdLessThan(String value) {
            addCriterion("id <", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdLessThanOrEqualTo(String value) {
            addCriterion("id <=", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdLike(String value) {
            addCriterion("id like", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdNotLike(String value) {
            addCriterion("id not like", value, "id");
            return (Criteria) this;
        }

        public Criteria andIdIn(List<String> values) {
            addCriterion("id in", values, "id");
            return (Criteria) this;
        }

        public Criteria andIdNotIn(List<String> values) {
            addCriterion("id not in", values, "id");
            return (Criteria) this;
        }

        public Criteria andIdBetween(String value1, String value2) {
            addCriterion("id between", value1, value2, "id");
            return (Criteria) this;
        }

        public Criteria andIdNotBetween(String value1, String value2) {
            addCriterion("id not between", value1, value2, "id");
            return (Criteria) this;
        }


        public Criteria andTasknameIsNull() {
            addCriterion("taskname is null");
            return (Criteria) this;
        }

        public Criteria andTasknameIsNotNull() {
            addCriterion("taskname is not null");
            return (Criteria) this;
        }

        public Criteria andTasknameEqualTo(String value) {
            addCriterion("taskname =", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameNotEqualTo(String value) {
            addCriterion("taskname <>", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameGreaterThan(String value) {
            addCriterion("taskname >", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameGreaterThanOrEqualTo(String value) {
            addCriterion("taskname >=", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameLessThan(String value) {
            addCriterion("taskname <", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameLessThanOrEqualTo(String value) {
            addCriterion("taskname <=", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameLike(String value) {
            addCriterion("taskname like", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameNotLike(String value) {
            addCriterion("taskname not like", value, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameIn(List<String> values) {
            addCriterion("taskname in", values, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameNotIn(List<String> values) {
            addCriterion("taskname not in", values, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameBetween(String value1, String value2) {
            addCriterion("taskname between", value1, value2, "taskname");
            return (Criteria) this;
        }

        public Criteria andTasknameNotBetween(String value1, String value2) {
            addCriterion("taskname not between", value1, value2, "taskname");
            return (Criteria) this;
        }


        public Criteria andStarttimeIsNull() {
            addCriterion("starttime is null");
            return (Criteria) this;
        }

        public Criteria andStarttimeIsNotNull() {
            addCriterion("starttime is not null");
            return (Criteria) this;
        }

        public Criteria andStarttimeEqualTo(Date value) {
            addCriterion("starttime =", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeNotEqualTo(Date value) {
            addCriterion("starttime <>", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeGreaterThan(Date value) {
            addCriterion("starttime >", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeGreaterThanOrEqualTo(Date value) {
            addCriterion("starttime >=", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeLessThan(Date value) {
            addCriterion("starttime <", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeLessThanOrEqualTo(Date value) {
            addCriterion("starttime <=", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeLike(Date value) {
            addCriterion("starttime like", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeNotLike(Date value) {
            addCriterion("starttime not like", value, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeIn(List<Date> values) {
            addCriterion("starttime in", values, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeNotIn(List<Date> values) {
            addCriterion("starttime not in", values, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeBetween(Date value1, Date value2) {
            addCriterion("starttime between", value1, value2, "starttime");
            return (Criteria) this;
        }

        public Criteria andStarttimeNotBetween(Date value1, Date value2) {
            addCriterion("starttime not between", value1, value2, "starttime");
            return (Criteria) this;
        }


        public Criteria andEndtimeIsNull() {
            addCriterion("endtime is null");
            return (Criteria) this;
        }

        public Criteria andEndtimeIsNotNull() {
            addCriterion("endtime is not null");
            return (Criteria) this;
        }

        public Criteria andEndtimeEqualTo(Date value) {
            addCriterion("endtime =", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeNotEqualTo(Date value) {
            addCriterion("endtime <>", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeGreaterThan(Date value) {
            addCriterion("endtime >", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeGreaterThanOrEqualTo(Date value) {
            addCriterion("endtime >=", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeLessThan(Date value) {
            addCriterion("endtime <", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeLessThanOrEqualTo(Date value) {
            addCriterion("endtime <=", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeLike(Date value) {
            addCriterion("endtime like", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeNotLike(Date value) {
            addCriterion("endtime not like", value, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeIn(List<Date> values) {
            addCriterion("endtime in", values, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeNotIn(List<Date> values) {
            addCriterion("endtime not in", values, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeBetween(Date value1, Date value2) {
            addCriterion("endtime between", value1, value2, "endtime");
            return (Criteria) this;
        }

        public Criteria andEndtimeNotBetween(Date value1, Date value2) {
            addCriterion("endtime not between", value1, value2, "endtime");
            return (Criteria) this;
        }


        public Criteria andStatusIsNull() {
            addCriterion("status is null");
            return (Criteria) this;
        }

        public Criteria andStatusIsNotNull() {
            addCriterion("status is not null");
            return (Criteria) this;
        }

        public Criteria andStatusEqualTo(String value) {
            addCriterion("status =", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusNotEqualTo(String value) {
            addCriterion("status <>", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusGreaterThan(String value) {
            addCriterion("status >", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusGreaterThanOrEqualTo(String value) {
            addCriterion("status >=", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusLessThan(String value) {
            addCriterion("status <", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusLessThanOrEqualTo(String value) {
            addCriterion("status <=", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusLike(String value) {
            addCriterion("status like", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusNotLike(String value) {
            addCriterion("status not like", value, "status");
            return (Criteria) this;
        }

        public Criteria andStatusIn(List<String> values) {
            addCriterion("status in", values, "status");
            return (Criteria) this;
        }

        public Criteria andStatusNotIn(List<String> values) {
            addCriterion("status not in", values, "status");
            return (Criteria) this;
        }

        public Criteria andStatusBetween(String value1, String value2) {
            addCriterion("status between", value1, value2, "status");
            return (Criteria) this;
        }

        public Criteria andStatusNotBetween(String value1, String value2) {
            addCriterion("status not between", value1, value2, "status");
            return (Criteria) this;
        }


        public Criteria andCountIsNull() {
            addCriterion("count is null");
            return (Criteria) this;
        }

        public Criteria andCountIsNotNull() {
            addCriterion("count is not null");
            return (Criteria) this;
        }

        public Criteria andCountEqualTo(String value) {
            addCriterion("count =", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountNotEqualTo(String value) {
            addCriterion("count <>", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountGreaterThan(String value) {
            addCriterion("count >", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountGreaterThanOrEqualTo(String value) {
            addCriterion("count >=", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountLessThan(String value) {
            addCriterion("count <", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountLessThanOrEqualTo(String value) {
            addCriterion("count <=", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountLike(String value) {
            addCriterion("count like", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountNotLike(String value) {
            addCriterion("count not like", value, "count");
            return (Criteria) this;
        }

        public Criteria andCountIn(List<String> values) {
            addCriterion("count in", values, "count");
            return (Criteria) this;
        }

        public Criteria andCountNotIn(List<String> values) {
            addCriterion("count not in", values, "count");
            return (Criteria) this;
        }

        public Criteria andCountBetween(String value1, String value2) {
            addCriterion("count between", value1, value2, "count");
            return (Criteria) this;
        }

        public Criteria andCountNotBetween(String value1, String value2) {
            addCriterion("count not between", value1, value2, "count");
            return (Criteria) this;
        }


        public Criteria andDataparam1IsNull() {
            addCriterion("dataparam1 is null");
            return (Criteria) this;
        }

        public Criteria andDataparam1IsNotNull() {
            addCriterion("dataparam1 is not null");
            return (Criteria) this;
        }

        public Criteria andDataparam1EqualTo(String value) {
            addCriterion("dataparam1 =", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1NotEqualTo(String value) {
            addCriterion("dataparam1 <>", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1GreaterThan(String value) {
            addCriterion("dataparam1 >", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1GreaterThanOrEqualTo(String value) {
            addCriterion("dataparam1 >=", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1LessThan(String value) {
            addCriterion("dataparam1 <", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1LessThanOrEqualTo(String value) {
            addCriterion("dataparam1 <=", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1Like(String value) {
            addCriterion("dataparam1 like", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1NotLike(String value) {
            addCriterion("dataparam1 not like", value, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1In(List<String> values) {
            addCriterion("dataparam1 in", values, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1NotIn(List<String> values) {
            addCriterion("dataparam1 not in", values, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1Between(String value1, String value2) {
            addCriterion("dataparam1 between", value1, value2, "dataparam1");
            return (Criteria) this;
        }

        public Criteria andDataparam1NotBetween(String value1, String value2) {
            addCriterion("dataparam1 not between", value1, value2, "dataparam1");
            return (Criteria) this;
        }


        public Criteria andDataparam2IsNull() {
            addCriterion("dataparam2 is null");
            return (Criteria) this;
        }

        public Criteria andDataparam2IsNotNull() {
            addCriterion("dataparam2 is not null");
            return (Criteria) this;
        }

        public Criteria andDataparam2EqualTo(String value) {
            addCriterion("dataparam2 =", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2NotEqualTo(String value) {
            addCriterion("dataparam2 <>", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2GreaterThan(String value) {
            addCriterion("dataparam2 >", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2GreaterThanOrEqualTo(String value) {
            addCriterion("dataparam2 >=", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2LessThan(String value) {
            addCriterion("dataparam2 <", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2LessThanOrEqualTo(String value) {
            addCriterion("dataparam2 <=", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2Like(String value) {
            addCriterion("dataparam2 like", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2NotLike(String value) {
            addCriterion("dataparam2 not like", value, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2In(List<String> values) {
            addCriterion("dataparam2 in", values, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2NotIn(List<String> values) {
            addCriterion("dataparam2 not in", values, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2Between(String value1, String value2) {
            addCriterion("dataparam2 between", value1, value2, "dataparam2");
            return (Criteria) this;
        }

        public Criteria andDataparam2NotBetween(String value1, String value2) {
            addCriterion("dataparam2 not between", value1, value2, "dataparam2");
            return (Criteria) this;
        }


        public Criteria andDataparam3IsNull() {
            addCriterion("dataparam3 is null");
            return (Criteria) this;
        }

        public Criteria andDataparam3IsNotNull() {
            addCriterion("dataparam3 is not null");
            return (Criteria) this;
        }

        public Criteria andDataparam3EqualTo(String value) {
            addCriterion("dataparam3 =", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3NotEqualTo(String value) {
            addCriterion("dataparam3 <>", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3GreaterThan(String value) {
            addCriterion("dataparam3 >", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3GreaterThanOrEqualTo(String value) {
            addCriterion("dataparam3 >=", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3LessThan(String value) {
            addCriterion("dataparam3 <", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3LessThanOrEqualTo(String value) {
            addCriterion("dataparam3 <=", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3Like(String value) {
            addCriterion("dataparam3 like", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3NotLike(String value) {
            addCriterion("dataparam3 not like", value, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3In(List<String> values) {
            addCriterion("dataparam3 in", values, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3NotIn(List<String> values) {
            addCriterion("dataparam3 not in", values, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3Between(String value1, String value2) {
            addCriterion("dataparam3 between", value1, value2, "dataparam3");
            return (Criteria) this;
        }

        public Criteria andDataparam3NotBetween(String value1, String value2) {
            addCriterion("dataparam3 not between", value1, value2, "dataparam3");
            return (Criteria) this;
        }


        public Criteria andLikeQuery(RpaRecordPush record) {
            List<String> list = new ArrayList<String>();
            List<String> list2 = new ArrayList<String>();
            StringBuffer buffer = new StringBuffer();
            if (record.getId() != null && StrUtil.isNotEmpty(record.getId().toString())) {
                list.add("ifnull(id,'')");
            }
            if (record.getTaskname() != null && StrUtil.isNotEmpty(record.getTaskname().toString())) {
                list.add("ifnull(taskname,'')");
            }
            if (record.getStarttime() != null && StrUtil.isNotEmpty(record.getStarttime().toString())) {
                list.add("ifnull(starttime,'')");
            }
            if (record.getEndtime() != null && StrUtil.isNotEmpty(record.getEndtime().toString())) {
                list.add("ifnull(endtime,'')");
            }
            if (record.getStatus() != null && StrUtil.isNotEmpty(record.getStatus().toString())) {
                list.add("ifnull(status,'')");
            }
            if (record.getCount() != null && StrUtil.isNotEmpty(record.getCount().toString())) {
                list.add("ifnull(count,'')");
            }
            if (record.getDataparam1() != null && StrUtil.isNotEmpty(record.getDataparam1().toString())) {
                list.add("ifnull(dataparam1,'')");
            }
            if (record.getDataparam2() != null && StrUtil.isNotEmpty(record.getDataparam2().toString())) {
                list.add("ifnull(dataparam2,'')");
            }
            if (record.getDataparam3() != null && StrUtil.isNotEmpty(record.getDataparam3().toString())) {
                list.add("ifnull(dataparam3,'')");
            }
            if (record.getId() != null && StrUtil.isNotEmpty(record.getId().toString())) {
                list2.add("'%" + record.getId() + "%'");
            }
            if (record.getTaskname() != null && StrUtil.isNotEmpty(record.getTaskname().toString())) {
                list2.add("'%" + record.getTaskname() + "%'");
            }
            if (record.getStarttime() != null && StrUtil.isNotEmpty(record.getStarttime().toString())) {
                list2.add("'%" + record.getStarttime() + "%'");
            }
            if (record.getEndtime() != null && StrUtil.isNotEmpty(record.getEndtime().toString())) {
                list2.add("'%" + record.getEndtime() + "%'");
            }
            if (record.getStatus() != null && StrUtil.isNotEmpty(record.getStatus().toString())) {
                list2.add("'%" + record.getStatus() + "%'");
            }
            if (record.getCount() != null && StrUtil.isNotEmpty(record.getCount().toString())) {
                list2.add("'%" + record.getCount() + "%'");
            }
            if (record.getDataparam1() != null && StrUtil.isNotEmpty(record.getDataparam1().toString())) {
                list2.add("'%" + record.getDataparam1() + "%'");
            }
            if (record.getDataparam2() != null && StrUtil.isNotEmpty(record.getDataparam2().toString())) {
                list2.add("'%" + record.getDataparam2() + "%'");
            }
            if (record.getDataparam3() != null && StrUtil.isNotEmpty(record.getDataparam3().toString())) {
                list2.add("'%" + record.getDataparam3() + "%'");
            }
            buffer.append(" CONCAT(");
            buffer.append(StrUtil.join(",", list));
            buffer.append(")");
            buffer.append(" like CONCAT(");
            buffer.append(StrUtil.join(",", list2));
            buffer.append(")");
            if (!" CONCAT() like CONCAT()".equals(buffer.toString())) {
                addCriterion(buffer.toString());
            }
            return (Criteria) this;
        }

        public Criteria andLikeQuery2(String searchText) {
            List<String> list = new ArrayList<String>();
            StringBuffer buffer = new StringBuffer();
            list.add("ifnull(id,'')");
            list.add("ifnull(taskname,'')");
            list.add("ifnull(starttime,'')");
            list.add("ifnull(endtime,'')");
            list.add("ifnull(status,'')");
            list.add("ifnull(count,'')");
            list.add("ifnull(dataparam1,'')");
            list.add("ifnull(dataparam2,'')");
            list.add("ifnull(dataparam3,'')");
            buffer.append(" CONCAT(");
            buffer.append(StrUtil.join(",", list));
            buffer.append(")");
            buffer.append("like '%");
            buffer.append(searchText);
            buffer.append("%'");
            addCriterion(buffer.toString());
            return (Criteria) this;
        }

    }

    public static class Criteria extends GeneratedCriteria {
        protected Criteria() {
            super();
        }
    }

    public static class Criterion {
        private String condition;

        private Object value;

        private Object secondValue;

        private boolean noValue;

        private boolean singleValue;

        private boolean betweenValue;

        private boolean listValue;

        private String typeHandler;

        public String getCondition() {
            return condition;
        }

        public Object getValue() {
            return value;
        }

        public Object getSecondValue() {
            return secondValue;
        }

        public boolean isNoValue() {
            return noValue;
        }

        public boolean isSingleValue() {
            return singleValue;
        }

        public boolean isBetweenValue() {
            return betweenValue;
        }

        public boolean isListValue() {
            return listValue;
        }

        public String getTypeHandler() {
            return typeHandler;
        }

        protected Criterion(String condition) {
            super();
            this.condition = condition;
            this.typeHandler = null;
            this.noValue = true;
        }

        protected Criterion(String condition, Object value, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.typeHandler = typeHandler;
            if (value instanceof List<?>) {
                this.listValue = true;
            } else {
                this.singleValue = true;
            }
        }

        protected Criterion(String condition, Object value) {
            this(condition, value, null);
        }

        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.secondValue = secondValue;
            this.typeHandler = typeHandler;
            this.betweenValue = true;
        }

        protected Criterion(String condition, Object value, Object secondValue) {
            this(condition, value, secondValue, null);
        }
    }
}